package com.gugee.ins.common.beanutil;

import com.gugee.ins.common.model.mysql.media.InsMedia;

import com.gugee.ins.common.model.spider.media.EdgeMediaNode;


/**
 * 转换生成 InsMedia 类
 * @author Huang xin
 */
public class InsMediaConversion {

    private InsMediaConversion(){

    }

    public static InsMedia mapper(EdgeMediaNode dto) {
        if (dto == null) {
            return null;
        } else {
            InsMedia insMedia = new InsMedia();


            insMedia.setOwnerUid(getOwnerUid(dto));
            insMedia.setShortcode(dto.getShortcode());
            insMedia.setDisplayUrl(dto.getDisplayUrl());
            insMedia.setIsVideo(dto.isVideo());
            insMedia.setVideoUrl(dto.getVideoUrl());
            insMedia.setVideoViewCount(dto.getVideoViewCount());
            insMedia.setCaption(getCaption(dto));
            insMedia.setCommentCount(getEdgeMediaToCommentCount(dto));
            insMedia.setLikeCount(getEdgeMediaPreviewLikeCount(dto));
            insMedia.setCommentsDisabled(dto.isCommentsDisabled());
            insMedia.setTakenTime(dto.getTakenTime());
            insMedia.setLocationId(getLocationId(dto));
            insMedia.setLocationName(getLocationName(dto));
            insMedia.setTypename(dto.getTypename());
            insMedia.setProductType(dto.getProductType());

            return insMedia;
        }
    }

    private static long getEdgeMediaPreviewLikeCount(EdgeMediaNode edgeMediaNode) {
        if (edgeMediaNode == null) {
            return 0L;
        } else {
            EdgeMediaNode.EdgeMediaPreviewLike edgeMediaPreviewLike = edgeMediaNode.getEdgeMediaPreviewLike();
            if (edgeMediaPreviewLike == null) {
                return 0L;
            } else {
                return edgeMediaPreviewLike.getCount();
            }
        }
    }

    private static int getEdgeMediaToCommentCount(EdgeMediaNode edgeMediaNode) {
        if (edgeMediaNode == null) {
            return 0;
        } else {
            EdgeMediaNode.EdgeMediaToComment edgeMediaToComment = edgeMediaNode.getEdgeMediaToComment();
            if (edgeMediaToComment == null) {
                return 0;
            } else {
                return edgeMediaToComment.getCount();
            }
        }
    }

    public static long getMid(EdgeMediaNode dto) {
        if (dto.getMid() == null) {
            return 0L;
        }
        return dto.getMid();
    }

    public static long getOwnerUid(EdgeMediaNode dto) {
        if (dto.getOwner() == null || dto.getOwner().getUid() == null) {
            return 0L;
        }
        return dto.getOwner().getUid();
    }

    public static String getCaption(EdgeMediaNode dto) {
        if (dto.getEdgeMediaToCaption() != null
                && dto.getEdgeMediaToCaption().getEdges() != null
                && !dto.getEdgeMediaToCaption().getEdges().isEmpty()
                && dto.getEdgeMediaToCaption().getEdges().get(0).getNode() != null) {
            return dto.getEdgeMediaToCaption().getEdges().get(0).getNode().getText();
        }
        return null;
    }

    public static String getLocationName(EdgeMediaNode dto) {
        if (dto.getLocation() != null) {
            return dto.getLocation().getName() ;
        }
        return null;
    }

    public static Long getLocationId(EdgeMediaNode dto) {
        if (dto.getLocation() != null && dto.getLocation().getId() > 0) {
            return dto.getLocation().getId();
        }
        return null;
    }

    /**
     * 合并爬到的新对象和数据库中的就对象
     * @param insMedia
     * @param insMediaDba
     */
    public static void mergeDba(InsMedia insMedia,InsMedia insMediaDba){
        insMedia.setId(insMediaDba.getId());

        if(insMediaDba.getCollectCommentsCount() > 0){
            insMedia.setCollectCommentsCount(insMediaDba.getCollectCommentsCount());
        }
        if(insMediaDba.getLastCommentCollectTime() > 0){
            insMedia.setLastCommentCollectTime(insMediaDba.getLastCommentCollectTime());
        }
        insMedia.setIsAd(insMediaDba.getIsAd());
        insMedia.setCreateTime(insMediaDba.getCreateTime());
    }
}
